home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / c / egem_210 / egem / source / scrap.c < prev    next >
C/C++ Source or Header  |  1995-11-25  |  3KB  |  156 lines

  1.  
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include "proto.h"
  5.  
  6. void _scrp_init(void)
  7. {
  8.     reg char scrap[MAX_PATH],*path;
  9.     reg long handle,len;
  10.  
  11.     scrp_read(scrap);
  12.     if (scrap[0]=='\0')
  13.     {
  14.         if ((path=getenv("CLIPBOARD"))!=NULL || (path=getenv("CLIPBRD"))!=NULL || (path=getenv("SCRAPDIR"))!=NULL)
  15.             strcpy(scrap,path);
  16.         else
  17.         {
  18.             reg long ssp;
  19.  
  20.             strcpy(scrap,"X:\\clipbrd");
  21.             ssp = Super(NULL);
  22.             *scrap = (char) (*((int *) 0x446)+65);
  23.             Super((void *) ssp);
  24.         }
  25.     }
  26.  
  27.     if ((len = strlen(scrap))>0)
  28.     {
  29.         len--;
  30.         if (scrap[len]=='\\')
  31.             scrap[len]='\0';
  32.     
  33.         handle = Dcreate(scrap);
  34.         if (handle>=0 || handle==-36)
  35.         {
  36.             scrp_write(strcat(scrap,"\\"));
  37.             return;
  38.         }
  39.     }
  40.  
  41.     scrp_write("");
  42. }
  43.  
  44. int scrp_path(char *path,char *file)
  45. {
  46.     scrp_read(path);
  47.     if (path[0])
  48.     {
  49.         MakeFullpath(path,NULL,(file) ? file : "");
  50.         return (TRUE);
  51.     }
  52.     else
  53.         return (FALSE);
  54. }
  55.  
  56. void scrp_clear(int all)
  57. {
  58.     reg char scrap[MAX_PATH];
  59.  
  60.     if (scrp_path(scrap,(all) ? "*.*" : "scrap.*"))
  61.     {
  62.         reg DTA *old = Fgetdta(), dta;
  63.         reg char fname[MAX_PATH];
  64.  
  65.         Fsetdta(&dta);
  66.         if (!Fsfirst(scrap,0))
  67.         {
  68.             strcpy(fname,scrap);
  69.             do
  70.             {
  71.                 strcpy(GetFilename(fname),dta.d_fname);
  72.                 Fdelete(fname);
  73.             }
  74.             while (!Fsnext());
  75.         }
  76.         Fsetdta(old);
  77.     }
  78. }
  79.  
  80. long scrp_length()
  81. {
  82.     reg long length = 0;
  83.     char scrap[MAX_PATH];
  84.  
  85.     if (scrp_path(scrap,"scrap.*"))
  86.     {
  87.         reg DTA *old = Fgetdta(), dta;
  88.  
  89.         Fsetdta(&dta);
  90.         if (!Fsfirst(scrap,0))
  91.             do
  92.                 length += dta.d_length;
  93.             while (!Fsnext());
  94.         Fsetdta(old);
  95.     }
  96.  
  97.     return (length);
  98. }
  99.  
  100. int    scrp_find(char *extension,char *filename)
  101. {
  102.     int exit = FALSE;
  103.     char scrap[MAX_PATH];
  104.  
  105.     if (scrp_path(scrap,"scrap.*"))
  106.     {
  107.         reg DTA *old = Fgetdta(), dta;
  108.         reg char path[MAX_PATH],ext_buf[MAX_PATH],*ext,*sep=" ,.";
  109.  
  110.         Fsetdta(&dta);
  111.         if (!Fsfirst(scrap,-1))
  112.         {
  113.             strcpy(path,scrap);
  114.             *GetFilename(scrap) = '\0';
  115.  
  116.             ext = strtok(strcpy(ext_buf,extension),sep);
  117.             while (ext!=NULL)
  118.             {
  119.                 strcpy(GetExtension(path)+1,ext);
  120.                 if (!Fsfirst(path,-1) && (dta.d_attrib & 0x18)==0)    /* (FA_LABEL|FA_DIR) */
  121.                 {
  122.                     MakeFullpath(filename,scrap,dta.d_fname);
  123.                     exit = TRUE;
  124.                     break;
  125.                 }
  126.                 ext = strtok(NULL,sep);
  127.             }
  128.         }
  129.         Fsetdta(old);
  130.     }
  131.  
  132.     return (exit);
  133. }
  134.  
  135. void scrp_changed(int format,long best_ext)
  136. {
  137.     XAcc *av;
  138.     char *scrap;
  139.     int msg[8];
  140.  
  141.     msg[0] = SC_CHANGED;
  142.     msg[3] = format;
  143.     msg[4] = (int) (best_ext>>16);
  144.     msg[5] = (int) best_ext;
  145.     msg[6] = msg[7] = 0;
  146.     XAccBroadCast(msg);
  147.  
  148.     if ((av=find_id(AvServer))!=NULL && (av->va_msgs & MSG_PATH_UPDATE) && (scrap=GetMsgBuffer(MAX_PATH))!=NULL)
  149.     {
  150.         scrp_path(scrap,NULL);
  151.         *(char **) &msg[3] = scrap;
  152.         AvSendMsg(AvServer,AV_PATH_UPDATE,msg);
  153.         Mfree(scrap);
  154.     }
  155. }
  156.